package com.example.basic.base;

import org.joda.time.DateTime;

import java.sql.Timestamp;
import java.util.Date;
import java.util.Map;

/**
 * 公用的顶层服务类（用于封装一些基本的操作）
 */
public interface BaseService {
    // ================================================================================================
    // 多语言文本
    // ================================================================================================

    /**
     * 获取多语言文本
     *
     * @param code 文本编号
     * @return String
     */
    String getMessage(String code);

    /**
     * 获取多语言文本
     *
     * @param code 文本编号
     * @param args 可选参数
     * @return String
     */
    String getMessage(String code, Object[] args);

    /**
     * 获取多语言文本
     *
     * @param code           文本编号
     * @param args           可选参数
     * @param defaultMessage 默认文本
     * @return String
     */
    String getMessage(String code, Object[] args, String defaultMessage);

    // ================================================================================================
    // 其他通用的方法
    // ================================================================================================

    /**
     * 通过IdWorker生成唯一ID
     *
     * @return Long
     */
    Long generateNextId();

    /**
     * Map
     *
     * @return Map
     */
    Map<Boolean, String> boolMap();

    // ================================================================================================
    // 日期相关基础方法
    // ================================================================================================

    /**
     * 获取当前时间
     *
     * @return Timestamp
     */
    Timestamp getTimestamp();

    /**
     * 获取当前时间
     *
     * @return DateTime
     */
    DateTime getDatetime();

    /**
     * 获取当前时间
     *
     * @return Date
     */
    Date getDate();

    /**
     * 获取系统支持最大时间
     *
     * @return Date
     */
    Date getMaxDate();

    /**
     * 获取系统支持最小时间
     *
     * @return Date
     */
    Date getMinDate();

    /**
     * 获取系统支持最大时间
     *
     * @return Timestamp
     */
    Timestamp getMaxTimestamp();

    /**
     * 获取系统支持最小时间
     *
     * @return Timestamp
     */
    Timestamp getMinTimestamp();

    boolean isValidId(String id);

    boolean isValidEntityId(IdEntity idEntity);
}
